package com.gupaoedu.demo.singleton.lazy;


//全程没用大syncha'r
public class LazyInnerClassSingleton {

    //虽然构造方法私有了，但是，逃不过反射的法眼
    private LazyInnerClassSingleton(){
        if(LazyHolder.LAZY != null){
            throw  new RuntimeException("不允许构建多个实例");
        }
    }

    public static LazyInnerClassSingleton getInstance(){
        return LazyHolder.LAZY;
    }
    // lazyHolder 里面的逻辑需要等到外部方法调用的时候才执行
    //巧妙利用了内部类的特征
    //JVM底层执行逻辑，完美的避免了线程的安全问题

    private static class LazyHolder{
        private static final LazyInnerClassSingleton LAZY = new LazyInnerClassSingleton();
    }
}
